#ifndef _TAB_DYN
#define _TAB_DYN

#include <stdio.h>
#include "equipement.h"



/**
@brief la structure TableauDynamique qui prend un pointeur su equipement la taille et la capacité, le tableau est numerote de 0 à taille-1!
Dans les boucles, incrementer i de 0 à tailleUtilisee-1
**/

struct sTableauDynamique
{
  unsigned int capacite;
  unsigned int tailleUtilisee;
  Equipement *tabEq;
};
typedef struct sTableauDynamique TableauDynamique;

/**
@brief la fonctions d'initialisation et de liberation,
Precondition : t non prealablement initialise
Postcondition : t initialise a une alveole vide (taille utilisee nulle).
**/
void initTabDyn(TableauDynamique * t);

/**
@brief Precondition : t prealablement initialise
       Postcondition : t pret a disparaitre. La memoire allouee dynamiquement est liberee.
       On ne pourra plus appeler les sous-programmes qui necessitent que t soit initialise.
**/
void libereTabDyn(TableauDynamique *t);

/**
@brief l'accesseur permettant d'accéder aux données
**/
unsigned int getTailleTabDyn(const TableauDynamique *t);


/* Precondition : t prealablement initialise, 0 <= i < tailleUtilisee(t) */
/* Resultat : retourne le i+1eme Equipement de t */
Equipement* getIemeElementTabDyn(TableauDynamique *t, unsigned int i);

const Equipement *getPointeurTableauDynamique (const TableauDynamique *t);

/**
@brief l'accesseur permettant d'accéder aux données
**/
Equipement* setIemeElementTabDyn(const TableauDynamique *t, unsigned int i);
/**
@brief la fonction de manipulation de equipement
**/
//Mutateurs
Equipement* setIemeElementTabDyn(TableauDynamique *t, Equipement *eq, unsigned int i);

/* Precondition : t prealablement initialise */
/* Postcondition : L'element e est ajoute dans la premiere alveole inutilisee
   du tableau, la taille utilisee est incrementee de 1. Doublement de la
   capacite de t, si necessaire. */


//Fonctions de manipulation
void ajouterElementTabDyn(TableauDynamique *t, Equipement *eq);

/**
@brief la fonction qui supprime les elements du tableau
**/
/* Precondition : t prealablement initialise et non vide, position comprise entre 0 et tailleUtilisee -1 */
/* Postcondition : la taille utilisee du tableau est decrementee de 1. Si
   tailleUtilisee < capacite/3, alors on divise la capacité par 2. */
void supprimerElementTabDyn( TableauDynamique *t, int position );

/**
@brief la fonction de test de non regression
**/
void testRegressionTabDyn();


#endif
